package br.com.framework.client.web.mb;

import br.com.framework.client.negocio.factory.FacadeFactory;
import br.com.framework.client.negocio.factory.TipoAcesso;
import br.com.framework.client.web.JSFMensagem;
import br.com.framework.client.web.Paginador;

public abstract class ManagedBeanGeneric {

	public final FacadeFactory facadeFactory;

	/**
	 * 
	 * @param nomeEar
	 * @param tipoAcesso
	 */
	public ManagedBeanGeneric() {
		facadeFactory = FacadeFactory.instanciar(getNomeEar(), getTipoAcesso());
	}

	public abstract String getNomeEar();

	public abstract TipoAcesso getTipoAcesso();

	public abstract String getTitulo();

	protected String getMensagem(String codigoMensagem, Object... paramentrosMensagem) {
		return JSFMensagem.getMensagemAplicacaoFormatada(codigoMensagem, paramentrosMensagem);
	}

	public String getCarregar() {
		return getMensagem("msg.carregar");
	}

	public String getMsgPaginador1() {
		return getMensagem("msg.paginador.1");
	}

	public String getMsgPaginador2() {
		return getMensagem("msg.paginador.2");
	}

	public String getMsgPaginador3() {
		return getMensagem("msg.paginador.3");
	}

	public String getMsgPaginador4() {
		return getMensagem("msg.paginador.4");
	}

	public abstract Integer getQuantidadeLinhasPaginacao();

	public abstract Integer getPaginaAtual();

	@SuppressWarnings("rawtypes")
	public abstract Paginador getPaginador();

	public String getLegendaPaginador() {
		StringBuffer retorno = new StringBuffer();
		retorno.append(getMsgPaginador1());
		retorno.append(getPaginaAtual() == null ? 1 : getPaginaAtual() * getQuantidadeLinhasPaginacao() - (getQuantidadeLinhasPaginacao() - 1));
		retorno.append(" ");
		retorno.append(getMsgPaginador2());
		retorno.append((getPaginaAtual() == null ? 1 : getPaginaAtual() * getQuantidadeLinhasPaginacao()) < getPaginador().getRowCount() ? ((getPaginaAtual() == null ? 1 : getPaginaAtual()) * getQuantidadeLinhasPaginacao()) : getPaginador().getRowCount());
		retorno.append(" ");
		retorno.append(getMsgPaginador3());
		retorno.append(getPaginador().getRowCount());
		retorno.append(" ");
		retorno.append(getMsgPaginador4());
		return retorno.toString();
	}

	public boolean isPrependId() {
		return Boolean.TRUE;
	}

	public String getForm() {
		return "form";
	}

	public String getSalvar() {
		return getMensagem("msg.botao.salvar");
	}

	public String getPesquisar() {
		return getMensagem("msg.botao.pesquisar");
	}

	public String getNovo() {
		return getMensagem("msg.botao.novo");
	}

	public String getExcluir() {
		return getMensagem("msg.botao.Excluir");
	}

	public String getCancelar() {
		return getMensagem("msg.botao.cancelar");
	}

	public abstract String getSubmit();

}
